GMaps.geolocate = function (options) {
    var complete_callback = options.always || options.complete;

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function (position) {
            options.success(position);

            if (complete_callback) {
                complete_callback();
            }
        }, function (error) {
            options.error(error);

            if (complete_callback) {
                complete_callback();
            }
        }, options.options);
    } else {
        options.not_supported();

        if (complete_callback) {
            complete_callback();
        }
    }
};

GMaps.geocode = function (options) {
    this.geocoder = new google.maps.Geocoder();
    var callback = options.callback;
    if (options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) {
        options.latLng = new google.maps.LatLng(options.lat, options.lng);
    }

    delete options.lat;
    delete options.lng;
    delete options.callback;

    this.geocoder.geocode(options, function (results, status) {
        callback(results, status);
    });
};
